TypeScriptではじめるChatGPT API:入門から一歩進んだテクニックまで
https://tech.uzabase.com/entry/2023/03/15/120000
プロンプトエンジニアリングによるキャラ付け、要約(長い文章には再帰)、埋め込みを使った質問応答のTypeScript例。外部システムとの連携では人とAIが協働して問題解決してる、熱い!Python例もChatGPTが変換してくれそう
https://github.com/newspicks/learn-chatgpt-api
chatgptコマンド、またはスクリプト実行
👉ChatGPT開発合宿を開催しました!につながる
ChatGPT API
messagesを投げるとmessageが返ってくる
3つのrole
"user"が自分の発言
"assitant"が ChatGPT の発言
"system"というのは ChatGPT に全体的な指示を出したりするのに使えるもの
ChatGPT は記憶を持たないので、対話をするにはリクエストに"user"の発言だけではなく"assistant"との対話の履歴を含める必要がある
messages以外のパラメタ
model
この記事では"gpt-3.5-turbo"すなわち ChatGPT
temperature
値を大きくすると ChatGPT の発言がより多様でランダムな感じになります
max_tokens
ChatGPT が返す最大トークン数です。API はトークン数に基づいて課金される
トークン
ChatGPT が内部で文字列を分割するのに使っている単位
文字とも単語とも異なります。現状、日本語の場合は1文字が1トークンよりちょっと多いくらい
ChatGPT は入出力合わせて一度に約 4000 トークンしか扱えないという制限があります
simple-chat(キャラクター AI)
https://github.com/newspicks/learn-chatgpt-api/blob/92b377c79eadc0ec5654df544c15cd62f966c197/src/simpleChat.ts
summary-and-comment
https://github.com/newspicks/learn-chatgpt-api/blob/92b377c79eadc0ec5654df544c15cd62f966c197/src/summaryAndComment.ts
要約
getSummary
userプロンプトのみ
https://github.com/newspicks/learn-chatgpt-api/blob/92b377c79eadc0ec5654df544c15cd62f966c197/src/summaryAndComment.ts#L8-L10
以下の文章を200字程度で要約してください。
(IMO:設定がいらないからsystemプロンプトはなしということ?)
コメント
getComment
systemプロンプト + userプロンプト
system https://github.com/newspicks/learn-chatgpt-api/blob/92b377c79eadc0ec5654df544c15cd62f966c197/src/summaryAndComment.ts#L5-L6
設定を伝える
あなたは(略)イメージキャラクターのumaです。
語尾には必ず「ウマ」を付けて喋ります。
user https://github.com/newspicks/learn-chatgpt-api/blob/92b377c79eadc0ec5654df544c15cd62f966c197/src/summaryAndComment.ts#L12-L23
文章と要約は埋まる
「感想:」に続けて出力させる
classify
summary-long-text(再帰的要約)
長い文章の要約
文章を分割して再帰的に要約させるというのがひとつのやり方です。
https://github.com/newspicks/learn-chatgpt-api/blob/92b377c79eadc0ec5654df544c15cd62f966c197/src/summaryLongText.ts
固定長のチャンクに分割させる実装
chunkStringはテキストを分割した配列を返している
https://github.com/newspicks/learn-chatgpt-api/blob/92b377c79eadc0ec5654df544c15cd62f966c197/src/util.ts#L31
IMO:テキストをA/B/Cに
実際はAの要約、Bの要約、Cの要約をまとめて要約している?(map)
qa-with-search
create-embedding
qa-with-embedding